#!/bin/bash

# 脚本功能说明：
# 该脚本用于获取本机的网络节点名称（主机名），提供了四种不同的方法来获取网络节点名称，
# 并对获取到的结果进行一致性检查，确保获取的主机名是准确和一致的。

# 方法1：使用 uname --nodename 命令
get_hostname_uname() {
    # 使用 uname 命令的 --nodename 选项获取网络节点的主机名
    uname --nodename
}

# 方法2：使用 hostname 命令
get_hostname_hostname() {
    # 使用 hostname 命令获取当前主机名
    hostname
}

# 方法3：读取 /etc/hostname 文件
get_hostname_etc() {
    # 通过读取系统的 /etc/hostname 文件来获取主机名
    cat /etc/hostname
}

# 主函数：测试所有方法并比较结果
main() {
    echo "正在测试获取网络节点名称的多种方法："

    # 调用所有方法获取主机名
    # 每个方法返回的主机名被存储在不同的变量中
    hostname_uname=$(get_hostname_uname)   # 获取 uname --nodename 的返回值
    hostname_hostname=$(get_hostname_hostname)  # 获取 hostname 命令的返回值
    hostname_etc=$(get_hostname_etc)  # 获取 /etc/hostname 文件的内容
    hostname_getent=$(get_hostname_getent)  # 获取 getent hosts 的返回值

    # 显示所有方法的结果
    echo "方法1：uname --nodename -> $hostname_uname"
    echo "方法2：hostname 命令 -> $hostname_hostname"
    echo "方法3：/etc/hostname 文件 -> $hostname_etc"

    # 一致性检查：检查所有方法返回的主机名是否一致
    if [[ "$hostname_uname" == "$hostname_hostname" && "$hostname_hostname" == "$hostname_etc" ]]; then
        # 如果所有方法返回的主机名一致，输出一致的主机名
        echo "所有方法返回的网络节点名称一致：$hostname_uname"
    else
        # 如果返回的主机名不一致，提示用户检查
        echo "方法返回的结果不一致，请手动检查："
    fi
}

# 执行主函数
main
